package jcpcotizaciones.Control;

/**
 * Darwin Silva Vargas
 * Viviana Figueroa Barros
 * Carlos Manota Mejía
 * Elkin Cedeño
 */

import java.util.List;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import jcpcotizaciones.Modelo.Item;

public class ControlItem {
    private static List item;
    private static Connection con;

public static void agregarItem (Item i) throws SQLException, Exception{
    ManejadorBaseDatos mbd= ManejadorBaseDatos.getInstancia();
    mbd.conectar();
    con=mbd.getConexion();
    if (con == null ){
      throw new SQLException(" No hay conexion ");
    }
    PreparedStatement pst = null;
    try {
      pst = con.prepareStatement("Insert Into item values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
          pst.setString(1,i.getNumero());
          pst.setDouble(2,i.getArte());
          pst.setString(3,i.getDescripcion());
          pst.setInt(4,i.getCantidad());
          pst.setInt(5,i.getMontaje());
          pst.setDouble(6,i.getTransporte());
          pst.setDouble(7,i.getRefile());
          pst.setInt(8,i.getTiro());
          pst.setInt(9,i.getRetiro());
          pst.setDouble(10,i.getValorunitario());
          pst.setDouble(11,i.getValortotal());
          pst.setString(12,i.getCotizacion().getNumero());
          pst.setString(13,i.getCortepapel().getCodigoCorte());
          pst.setString(14,i.getMaquina().getCodigoMaquina());
          pst.setString(15,i.getTipopapel().getCod_papel());

          if (i.getOtro()==null){
              pst.setString(16,null);
          } else{
              pst.setString(16,i.getOtro().getIdotros());
          }
          
          pst.setString(17,i.getTamanoFinal());

      pst.executeUpdate();
    }finally {
        if (pst != null) {
             pst.close();
        }
    }
}

public static Item BuscarItem(String numero) throws SQLException{
     ResultSet rs = null;
     PreparedStatement pst = null;
     Item i = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from item where numero = ?");
         pst.setString(1, numero);
         rs = pst.executeQuery();
         while(rs.next()) {
             i = Item.load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return i;
    }
}

public static Item BuscarItemCotizacion(String numero) throws SQLException{
     ResultSet rs = null;
     PreparedStatement pst = null;
     Item i = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from item where cotizacion_numero = ?");
         pst.setString(1, numero);

         rs = pst.executeQuery();
         while(rs.next()) {
             i = Item.load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return i;
    }
}


public static boolean ModificarItem(Item i, String num) throws SQLException, Exception{
      if ( BuscarItem(num) == null) {
          throw new SQLException ("Item no registrado ");
      }
       PreparedStatement pst = null;
       boolean res=false;
       try {
        ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con=mbd.getConexion();
        pst = con.prepareStatement("Update item set numero = ?, arte=?, descripcion = ?, cantidad= ?, " +
             "montaje =?, transporte=?, refile=?, tiro=?, retiro=?, vrunitario= ?, vrtotal= ?, cotizacion_numero=?, cortepapel_codcortepapel=?, " +
             " tipomaquina_codtipomaquina= ?, tipopapel_codtipopapel=?, otros_idotros=?, tamanofinal=? where numero = ?" );
          pst.setString(1,i.getNumero());
          pst.setDouble(2,i.getArte());
          pst.setString(3,i.getDescripcion());
          pst.setInt(4,i.getCantidad());
          pst.setInt(5,i.getMontaje());
          pst.setDouble(6,i.getTransporte());
          pst.setDouble(7,i.getRefile());
          pst.setInt(8,i.getTiro());
          pst.setInt(9,i.getTiro());
          pst.setDouble(10,i.getValorunitario());
          pst.setDouble(11,i.getValortotal());
          pst.setString(12,i.getCotizacion().getNumero());
          pst.setString(13,i.getCortepapel().getCodigoCorte());
          pst.setString(14,i.getMaquina().getCodigoMaquina());
          pst.setString(15,i.getTipopapel().getCod_papel());
          pst.setString(16,i.getOtro().getIdotros());
          pst.setString(17,i.getTamanoFinal());
          pst.setString(18,num);
          int r= pst.executeUpdate();
         if (r != 0) {
          res = true;
        }
        } finally {
          if (pst != null) {
            pst.close();
          }
       }
       return res;
}

 public static void EliminarItemCotizacion(String num) throws SQLException, Exception{
     if (BuscarItemCotizacion(num) == null) {
        throw new SQLException("No hay elemento clave de la clase Item");
     }
     PreparedStatement pst = null;

     try {
        ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con=mbd.getConexion();
        pst = con.prepareStatement("delete  from item where cotizacion_numero = ?");
        pst.setString(1, num);
        pst.executeUpdate();
     } finally {
        if (pst != null) {
           pst.close();
        }
     }
}

public static void EliminarItem(String num) throws SQLException, Exception{
     if (BuscarItem(num) == null) {
        throw new SQLException("No hay elemento clave de la clase cliente");
     }
     PreparedStatement pst = null;
     try {
        ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con=mbd.getConexion();
        pst = con.prepareStatement("delete from item where numero = ?");
        pst.setString(1, num);
        pst.executeUpdate();

     } finally {
        if (pst != null) {
           pst.close();
        }
     }
}

public static void listarItem() throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     item = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("select * from item ");
        rs = pst.executeQuery();
        while(rs.next()) {
           item.add(Item.load(rs));
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
}
}

public static List getItem(){
    return item;
}

public static void setClientes (List aItem){
    item = aItem;
}
}
